/* /////////////////////////////////////////////////////////////////////////////
 * File:        SimpleMap.d
 *
 * Purpose:     ピボットを使った射影を実現する
 *
 * Created      13th June 2007
 * Updated:     13th June 2007
 *
 * www:         http://
 *
 * Copyright (C) 2007 by Yasunobu Imamura
 *
 * This software is provided 'as-is', without any express or implied warranty.
 * In no event will the authors be held liable for any damages arising from the
 * use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not claim
 * that you wrote the original software. If you use this software in a product,
 * an acknowledgment in the product documentation would be appreciated but is
 * not required.
 *
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 *
 * 3. This notice may not be removed or altered from any source distribution. 
 *
 * ////////////////////////////////////////////////////////////////////////// */

module gtree.SimpleMap;

private import std.stdio;

class SimpleMap(T,PC)///T=>特徴量型, PC=>Projection Charactor
{
	alias T OriginType;
	alias TuppleFeature!(PC, L_infityNorm!(PC)) ProjectionType;

	T[] pivot;
	this()
	{
	}

	void addPivot(T t)
	{
		static if(is(T:Cloneable))
			pivot ~= t.clone;
		else
			pivot ~= t;
	}

	ProjectionType projection(T t)
	{
		PC[] result;
		result.length = pivot.length;
		for(int i=0; i<pivot.length; ++i)
		{
			result[i] = t.distance(pivot[i]);
		}
		return new ProjectionType(result);
	}
}
